package part17;

import java.util.ArrayList;
import java.util.LinkedHashSet;

/**
 * @author wcj
 * @Date 2021/6/1 15:57
 * @Version 1.0
 */
public class Part172 {

    public static void main(String[] args) {
        LinkedHashSet<String> strings = new LinkedHashSet<>(new CollectionData<String>(new Government(), 15));
        System.out.println(strings);
        strings.addAll(CollectionData.list(new Government(), 15));
        System.out.println(strings);
    }
}

interface Generator<T> {

    /**
     * next
     *
     * @return
     */
    T next();
}

/**
 * 往容器中添加元素只有Collections.nCopies()和Collections.fill()，并且添加的是相同的元素
 * 因为每个容器都有一个接收其它Collection的构造器和一个addAll()方法，所以我们可以自定义容器，然后利用容器的构造器或者addAll()方法来将容器中的元素
 * 复制到我们所需要的容器中
 *
 * @param <T>
 */
class CollectionData<T> extends ArrayList<T> {

    public CollectionData(Generator<T> gen, int size) {
        for (int i = 0; i < size; i++) {
            this.add(gen.next());
        }
    }

    public static <T> CollectionData<T> list(Generator<T> gen, int size) {
        return new CollectionData<T>(gen, size);
    }
}

class Government implements Generator<String> {
    String[] foundation = ("Strange women lying in ponds distributing swords is no basis for a system of government").split(" ");
    private int index;

    @Override
    public String next() {
        return foundation[index++];
    }
}
